blob: dbda550509a984734fbeeddfbf0e2ea83343cb83 [file] [log] [blame]
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +00001 _ _ ____ _
2 ___| | | | _ \| |
3 / __| | | | |_) | |
4 | (__| |_| | _ <| |___
5 \___|\___/|_| \_\_____|
6
7TODO
8
Daniel Stenberg9d68fde2002-08-14 23:35:19 +00009 Things to do in project cURL. Please tell us what you think, contribute and
10 send us patches that improve things! Also check the http://curl.haxx.se/dev
11 web section for various technical development notes.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +000012
Daniel Stenberg3660f672003-08-11 16:17:51 +000013 All bugs documented in the KNOWN_BUGS document are subject for fixing!
14
Daniel Stenberge60e7412001-11-02 12:51:18 +000015 LIBCURL
Daniel Stenberg6704d442001-08-22 11:22:43 +000016
Daniel Stenberg9d68fde2002-08-14 23:35:19 +000017 * Introduce an interface to libcurl that allows applications to easier get to
Daniel Stenbergd5be1142004-12-18 10:28:04 +000018 know what cookies that are received. CURLINFO_COOKIELIST to get a
19 curl_slist with cookies (netscape/mozilla cookie file formatted), and
20 CURLOPT_COOKIELIST to set a list of cookies (using the same format).
21 http://curl.haxx.se/mail/lib-2004-12/0195.html
Daniel Stenberg2c39a432001-07-02 08:21:25 +000022
Daniel Stenberg2d503912001-06-19 09:12:27 +000023 * Introduce another callback interface for upload/download that makes one
24 less copy of data and thus a faster operation.
Daniel Stenberge60e7412001-11-02 12:51:18 +000025 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
26
Daniel Stenberg3660f672003-08-11 16:17:51 +000027 * More data sharing. curl_share_* functions already exist and work, and they
Daniel Stenberg097938e2004-03-01 09:08:52 +000028 can be extended to share more. For example, enable sharing of the ares
29 channel.
30
31 * Introduce a new error code indicating authentication problems (for proxy
32 CONNECT error 407 for example). This cannot be an error code, we must not
33 return informational stuff as errors, consider a new info returned by
34 curl_easy_getinfo() #845941
Daniel Stenberg01cfe672002-01-18 12:48:36 +000035
Daniel Stenberg0d2cdd92004-10-08 09:57:33 +000036 * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and
37 SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete.
38
Daniel Stenberg9395cad2005-01-11 22:26:00 +000039 * Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and
40 GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan.
41
Daniel Stenberg87c43512002-08-26 22:32:46 +000042 LIBCURL - multi interface
43
Daniel Stenberg3e1caa62004-11-24 16:11:35 +000044 * Add a curl_multi_fdset() alternative that returns only two arrays with file
45 desrciptors for reading and writing to allow the app to use whatever
46 function it prefers. Plus, this allows apps to avoid the FD_SETSIZE problem
47 with select().
48
Daniel Stenberg3660f672003-08-11 16:17:51 +000049 * Add curl_multi_timeout() to make libcurl's ares-functionality better.
50
Daniel Stenberg87c43512002-08-26 22:32:46 +000051 * Make sure we don't ever loop because of non-blocking sockets return
Daniel Stenberg065b87e2003-02-24 18:14:48 +000052 EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc.
Daniel Stenberg87c43512002-08-26 22:32:46 +000053
Daniel Stenberg065b87e2003-02-24 18:14:48 +000054 * Make transfers treated more carefully. We need a way to tell libcurl we
55 have data to write, as the current system expects us to upload data each
56 time the socket is writable and there is no way to say that we want to
57 upload data soon just not right now, without that aborting the upload. The
58 opposite situation should be possible as well, that we tell libcurl we're
59 ready to accept read data. Today libcurl feeds the data as soon as it is
60 available for reading, no matter what.
Daniel Stenberg87c43512002-08-26 22:32:46 +000061
Daniel Stenberge60e7412001-11-02 12:51:18 +000062 DOCUMENTATION
63
Daniel Stenberg87c43512002-08-26 22:32:46 +000064 * More and better
Daniel Stenberge60e7412001-11-02 12:51:18 +000065
66 FTP
67
Daniel Stenberg3de85772004-12-21 10:54:21 +000068 * Code overhaul to make it more state-machine like and to _never_ block on
69 waiting for server responses when used with the multi interface.
70
Daniel Stenberg338c2da2004-08-09 12:39:28 +000071 * Support GSS/Kerberos 5 for ftp file transfer. This will allow user
72 authentication and file encryption. Possible libraries and example clients
73 are available from MIT or Heimdal. Requsted by Markus Moeller.
74
Daniel Stenberg3b491d02004-04-06 15:29:01 +000075 * REST fix for servers not behaving well on >2GB requests. This should fail
76 if the server doesn't set the pointer to the requested index. The tricky
Daniel Stenberg16e9a9e2004-11-28 13:04:34 +000077 (impossible?) part is to figure out if the server did the right thing or
78 not.
Daniel Stenberg3b491d02004-04-06 15:29:01 +000079
Daniel Stenberg339f84f2003-07-30 13:41:59 +000080 * Support the most common FTP proxies, Philip Newton provided a list
81 allegedly from ncftp:
82 http://curl.haxx.se/mail/archive-2003-04/0126.html
83
Daniel Stenbergc0acaa52003-04-28 17:29:32 +000084 * Make CURLOPT_FTPPORT support an additional port number on the IP/if/name,
85 like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]".
86
Daniel Stenbergb7567972003-05-26 08:19:06 +000087 * FTP ASCII transfers do not follow RFC959. They don't convert the data
88 accordingly.
Daniel Stenberg0058e872001-05-18 12:55:13 +000089
Daniel Stenbergeb6a14f2003-01-07 07:54:14 +000090 * Since USERPWD always override the user and password specified in URLs, we
91 might need another way to specify user+password for anonymous ftp logins.
92
Daniel Stenberg73323502004-05-05 06:11:57 +000093 * The FTP code should get a way of returning errors that is known to still
94 have the control connection alive and sound. Currently, a returned error
95 from within ftp-functions does not tell if the control connection is still
96 OK to use or not. This causes libcurl to fail to re-use connections
97 slightly too often.
98
Daniel Stenberge60e7412001-11-02 12:51:18 +000099 HTTP
Daniel Stenberg2c39a432001-07-02 08:21:25 +0000100
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000101 * Pipelining. Sending multiple requests before the previous one(s) are done.
102 This could possibly be implemented using the multi interface to queue
103 requests and the response data.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000104
Daniel Stenberg29108802004-12-22 09:19:29 +0000105 * When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has
106 never been reported as causing trouble to anyone, but should be considered
107 to use the HTTP version the user has chosen.
108
Daniel Stenberge60e7412001-11-02 12:51:18 +0000109 TELNET
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000110
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000111 * Reading input (to send to the remote server) on stdin is a crappy solution
112 for library purposes. We need to invent a good way for the application to
113 be able to provide the data to send.
114
115 * Move the telnet support's network select() loop go away and merge the code
116 into the main transfer loop. Until this is done, the multi interface won't
117 work for telnet.
118
Daniel Stenberge60e7412001-11-02 12:51:18 +0000119 SSL
120
Daniel Stenberg3b491d02004-04-06 15:29:01 +0000121 * Anton Fedorov's "dumpcert" patch:
122 http://curl.haxx.se/mail/lib-2004-03/0088.html
123
124 * Evaluate/apply Gertjan van Wingerde's SSL patches:
125 http://curl.haxx.se/mail/lib-2004-03/0087.html
126
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000127 * "Look at SSL cafile - quick traces look to me like these are done on every
128 request as well, when they should only be necessary once per ssl context
129 (or once per handle)". The major improvement we can rather easily do is to
130 make sure we don't create and kill a new SSL "context" for every request,
131 but instead make one for every connection and re-use that SSL context in
132 the same style connections are re-used. It will make us use slightly more
133 memory but it will libcurl do less creations and deletions of SSL contexts.
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000134
Daniel Stenberg60f19262001-11-13 09:56:29 +0000135 * Add an interface to libcurl that enables "session IDs" to get
136 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
137 serialise the current SSL state to a buffer of your choice, and
138 recover/reset the state from such a buffer at a later date - this is used
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000139 by mod_ssl for apache to implement and SSL session ID cache".
Daniel Stenberg60f19262001-11-13 09:56:29 +0000140
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000141 * OpenSSL supports a callback for customised verification of the peer
142 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
143 it be? There's so much that could be done if it were! (brought by Chris
144 Clark)
145
Daniel Stenberge60e7412001-11-02 12:51:18 +0000146 * Make curl's SSL layer option capable of using other free SSL libraries.
147 Such as the Mozilla Security Services
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000148 (http://www.mozilla.org/projects/security/pki/nss/) and GnuTLS
149 (http://www.gnu.org/software/gnutls/) This subject has been brought up
150 again recently since GPL-licensed applications that link with libcurl MAY
151 NOT distribute binaries that use OpenSSL without adding an exception clause
152 to the GPL license. See the LICENSE-MIXING document and this:
153 http://www.gnome.org/~markmc/openssl-and-the-gpl.html
Daniel Stenberge60e7412001-11-02 12:51:18 +0000154
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000155 LDAP
156
157 * Look over the implementation. The looping will have to "go away" from the
158 lib/ldap.c source file and get moved to the main network code so that the
159 multi interface and friends will work for LDAP as well.
160
Daniel Stenberg29108802004-12-22 09:19:29 +0000161 NEW PROTOCOLS
162
163 * TFTP - RFC1350 (protocol) and RFC3617 (URI format)
164
165 Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot
166 bootloader under a BSD-style license with attribution clause
167 http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c
168
169 * RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description)
170
171 * SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation
172 should most probably use an existing ssh library, such as OpenSSH.
173
174 * RSYNC (no RFCs for protocol nor URI/URL format). An implementation should
Daniel Stenbergdbb69792004-12-22 09:21:04 +0000175 most probably use an existing rsync library, such as librsync.
Daniel Stenberg29108802004-12-22 09:19:29 +0000176
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000177 CLIENT
Daniel Stenberge60e7412001-11-02 12:51:18 +0000178
Daniel Stenberg33929112004-09-09 06:58:01 +0000179 * "curl --sync http://example.com/feed[1-100].rss" or
180 "curl --sync http://example.net/{index,calendar,history}.html"
181
182 Downloads a range or set of URLs using the remote name, but only if the
183 remote file is newer than the local file. A Last-Modified HTTP date header
184 should also be used to set the mod date on the downloaded file.
185 (idea from "Brianiac")
186
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000187 * Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'.
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000188 Requested by Dane Jensen and others. This is easily scripted though.
Daniel Stenberg84ec4062004-08-13 12:06:30 +0000189
Daniel Stenberg87c43512002-08-26 22:32:46 +0000190 * Add an option that prevents cURL from overwiting existing local files. When
191 used, and there already is an existing file with the target file name
192 (either -O or -o), a number should be appended (and increased if already
193 existing). So that index.html becomes first index.html.1 and then
194 index.html.2 etc. Jeff Pohlmeyer suggested.
195
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000196 * "curl ftp://site.com/*.txt"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000197
Daniel Stenbergd095b202003-10-17 12:37:15 +0000198 * The client could be told to use maximum N simultaneous transfers and then
199 just make sure that happens. It should of course not make more than one
200 connection to the same remote host. This would require the client to use
201 the multi interface.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000202
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000203 * Extending the capabilities of the multipart formposting. How about leaving
204 the ';type=foo' syntax as it is and adding an extra tag (headers) which
205 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
206 fil1.hdr contains extra headers like
207
208 Content-Type: text/plain; charset=KOI8-R"
209 Content-Transfer-Encoding: base64
210 X-User-Comment: Please don't use browser specific HTML code
211
212 which should overwrite the program reasonable defaults (plain/text,
213 8bit...) (Idea brough to us by kromJx)
214
Daniel Stenberg4c3a2312004-01-09 08:59:55 +0000215 * ability to specify the classic computing suffixes on the range
216 specifications. For example, to download the first 500 Kilobytes of a file,
217 be able to specify the following for the -r option: "-r 0-500K" or for the
218 first 2 Megabytes of a file: "-r 0-2M". (Mark Smith suggested)
219
Daniel Stenberg391a37e2003-12-08 13:48:23 +0000220 * --data-encode that URL encodes the data before posting
221 http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested)
222
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000223 * Provide a way to make options bound to a specific URL among several on the
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000224 command line. Possibly by letting ':' separate options between URLs,
225 similar to this:
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000226
Daniel Stenberg9432bfe2004-08-27 07:17:52 +0000227 curl --data foo --url url.com : \
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000228 --url url2.com : \
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000229 --url url3.com --data foo3
230
Daniel Stenbergb5cafc02004-08-09 12:36:17 +0000231 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html)
Daniel Stenbergf7f6b282004-05-25 14:39:53 +0000232
233 The example would do a POST-GET-POST combination on a single command line.
234
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000235 BUILD
236
237 * Consider extending 'roffit' to produce decent ASCII output, and use that
238 instead of (g)nroff when building src/hugehelp.c
Daniel Stenberg3de85772004-12-21 10:54:21 +0000239
Daniel Stenberge60e7412001-11-02 12:51:18 +0000240 TEST SUITE
241
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000242 * Make the test servers able to serve multiple running test suites. Like if
243 two users run 'make test' at once.
244
Daniel Stenberg96b71312003-03-15 15:08:55 +0000245 * If perl wasn't found by the configure script, don't attempt to run the
246 tests but explain something nice why it doesn't.
247
Daniel Stenberge60e7412001-11-02 12:51:18 +0000248 * Extend the test suite to include more protocols. The telnet could just do
249 ftp or http operations (for which we have test servers).
250
251 * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
252 fork()s and it should become even more portable.
253
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000254 NEXT MAJOR RELEASE
Daniel Stenberg83a46382003-03-10 20:46:54 +0000255
256 * curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a
257 CURLMcode. These should be changed to be the same.
258
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000259 * remove obsolete defines from curl/curl.h
260
Daniel Stenberg35840a22004-07-01 08:22:52 +0000261 * make several functions use size_t instead of int in their APIs
262
Daniel Stenberg7cb10a12004-03-02 10:08:04 +0000263 * remove the following functions from the public API:
264 curl_getenv
265 curl_mprintf (and variations)
266 curl_strequal
267 curl_strnequal
268
269 They will instead become curlx_ - alternatives. That makes the curl app
270 still capable of building with them from source.
Daniel Stenberga00e7f02004-10-25 11:28:40 +0000271
272 * Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird
273 internally. Let the app judge success or not for itself.